home *** CD-ROM | disk | FTP | other *** search
/ Univers Mac Interactif 53 / Univers Mac Interactif - Issue 53.iso / UTILITAIRES IMPORTANTS / Player⁄Reader / Sparkle245 folder / (Docs) / New in 2.4.5 < prev    next >
Text File  |  1995-07-25  |  45KB  |  753 lines

  1. What's new in 2.4.5?
  2. • QuickTime dithering is now an option for color screens at 8bits or less depth.
  3.     QT dithering is slower than my fast dithering and uses more memory, but 
  4.     looks a little better. The one great advantage it has is that is looks a lot 
  5.     better when the picture is scaled larger.
  6. • The format of the stored resources has changed. This should not affect you in 
  7.     any way except that the first time you open your MPEGs, there'll be a slight
  8.     delay while the older resources are removed and the new resources created.
  9. • Some bug fixes were made in the code that handles MPEGs with multiple sequence 
  10.     headers (these are very rae except on CDi disks.)
  11. • Some data structures were moved into temp mem. The main benefit is that
  12.     large CDi MPEGs that previosuly required you to up the Sparkle partition 
  13.     to 5MB should now usually run OK in the default 2MB partition. 
  14. • Audio and video sync for CDi now works a lot better though it's still not perfect.
  15.  
  16. What's new in 2.4.3?
  17. • There are some MPEG encoders that create (for who knows what reason) an MPEG 
  18.     stream that starts not with a valid sequence start code but with a bunch 
  19.     of zeroes. Sparkle will now display such MPEGs.
  20. • Certain users (mainly BBS people and cross platform people) asked for 
  21.     an option to not have resources created automatically. This is now 
  22.     under the prefs menu.
  23. • For a specific (and rare) type of image block, 2.4.2 would display a 
  24.     slightly garbled image. Now fixed.
  25. • When the sound of an MPEG/sound combo is muted, the sound data is no longer 
  26.     read off disk while playing which reduces the CPU load a little.
  27. • Parsing of AIFF files is now a little more robust. More general forms of 
  28.     AIFF compression that MACE should be supported. If anyone has AIFF files 
  29.     compressed in an alternative format (ACE or IMA) pleas try test them and 
  30.     tell me if they work or don't.
  31. • WAV files are now directly parsed and played IF YOU have Sound Manager 3.1.
  32.     As always I have zero tolerance for obsolete system software. Do not waste 
  33.     my time by asking me to support WAVs under Sound Manager 3. Sound Manager 
  34.     3.1 is avilable in beta form to some users and will be available in 
  35.     general form soon enough.
  36. • Now supports QT sound overdriving. To overdrive a sound track, shift-click 
  37.     on the speaker button of the movie controller.
  38. • The caching of disk data as it's read has been modified as has the main 
  39.     event loop.    This has some effect on reducing the occasional long pauses 
  40.     that happen between frame displays.
  41. • The suffixes and file types used by Sparkle have all been changed in accordance 
  42.     with Phade's suggestions for sanely designed MPG suffixes.
  43. • The MPEG splitter can now (with some caveats) read CDi disks. See the ReadMe CDi 
  44.     doc for more details.
  45.  
  46. What's new in 2.4.2?
  47. • Bug fixes: 
  48.     In 2.4.1 the 68K version often didn't play. Damn uninitialized variable.
  49. • Now supports the .M15 and .M75 MPEG suffixes. Also uses a better guess for 
  50.     the frame rate when opening a movie with an invalid frame rate.
  51. • Revamped MPEG playback prefs dialog which removes obsolete options, adds a 
  52.     new option and is a little more cohesive.
  53. • Playback is slightly faster with half pixels off and about 7% faster with 
  54.     half pixels on. Essentially this means that the cost of using half pixels,
  55.     is not much more than the cost of not using it.
  56. • Under certain rare conditions in previosu versions, the color conversion 
  57.     tables were destroyed too soon and images were displayed in random 
  58.     colors. I hope I have now fixed this.
  59.  
  60. What's new in 2.4.1?
  61. • Yet more speed: 16bit playback is now more than THREE times as fast as 
  62.     it was. Playback of resized images is MUCH faster.
  63.     NOTE: Some of the code changes I made to get this speed may well cause 
  64.     the code to run slower on 68K macs. I am not going to work hard to 
  65.     maintain two code bases for PPC and 68K. All my effort is going into 
  66.     optimal PPC speed, with no concern for 68K.
  67.     As a result of the changes to make 16bit playback faster, two things are 
  68.     now a little different:
  69.     (a) 16bit display in 16bit-fast mode is now higher quality (and the same 
  70.     as the hybrid 16/24 bit option which will go away when I fix the 
  71.     playback prefs dialog)
  72.     (b) If you move the window across two screens image quality may be 
  73.     substantially reduced. I figure this doesn't matter much--you shouldn't 
  74.     do that anyway cause it causes so much slowdown.
  75.     People interested in speed may be interested in the following:
  76.     on my 7100/80 with an accelerated 24bit card, 40% (!!!!!) of time in 
  77.     24bit playback is now spent copying data to the screen. This is why we 
  78.     need PCI and a faster bus!!!
  79. • Now that I have some extra speed at my disposal, I have altered some of the 
  80.     internal code (parsing and IDCT) to correctly handle some of the most 
  81.     finicky details of the MPEG spec. The result is to slow the code down by 
  82.     about 5% but, under certain circumstances, to improve the quality of the
  83.     image somewhat. Now that I have the CPU to do a good job, I want to 
  84.     make the images Sparkel displays as good as possible, rather than the 
  85.     somewhat amateurish quality they have sometimes had.
  86. • Bug fixes to 2.4.0
  87.     * With 2.4.0 I switched to a new link system and forgot to weak link 
  88.     against SpeechLib. This caused problems for people without SpeechManager 
  89.     on their macs. Now fixed.
  90.     * The PPC assembly I was using to build a 24bit pixmap worked OK for my 
  91.     video card but built a pixmap incompatible with the HPV motherboard 
  92.     video on PPCs. This should now be fixed.
  93.     * There were a few typos in the PPC assembly I wrote for 2.4.0 resulting 
  94.     in occasionaly visual glitches in the image. These are fixed.
  95. • FINALLY: I now save the index Sparkle builds when it first opens an 
  96.     MPEG, saving the lengthy startup while the index is calculated. Along 
  97.     with this I now also allow a frame rate to be saved with the MPEG. This 
  98.     is especially useful for the common MPEGs floating around the internet 
  99.     that have been encoded with a non-standard MPEG rate like 6 or 8fps.
  100.     Along with this comes a new menu item under the edit menu for stripping 
  101.     the resource fork from an MPEG. Read the ReadMe 2nd file for why you 
  102.     might want to do this.
  103. • Command-Y is now a shortcut for the Set Frame Rate menu item.
  104. • In the past sometimes error messages were not reported to the user because 
  105.     of a design flaw in the Think Class Library which I use to handle that 
  106.     sort of thing. (Gee, thanks, Symantec.) I have made some patches to TCL 
  107.     to try to rectify this---hopefully now you will always get an error message
  108.     when something goes wrong (especially when opening files) rather than 
  109.     being left in the dark.
  110. • Backward realtime playback sometimes played frames out of order. No 
  111.     longer.
  112. • If both MPEG and QT movies were open and memory ran low, Sparkle could 
  113.     lock up. Fixed.
  114. • The user interface to the MPEGSplit app was slightly altered, to give better 
  115.     error message feedback, and to remove some confusion about what to do when 
  116.     an error occurs.
  117.  
  118. What's new in 2.4.0?
  119. • Bug fix: I made a dumb error in 2.3.4 or 2.3.5. The symptons varied 
  120.     depending on your machine but most commonly were that if you grew the 
  121.     document larger than a certain size the window would go blank.
  122. • Bug fix: If you did some fiddling with the MPEG prefs, swapping bit 
  123.     depths and such, you could get your windows to become munged. This bug 
  124.     has been around for a year or so and no-one ever reported it (you have to 
  125.     do a very precise set of things to trigger it) but now it's gone.
  126. • Speed boost: I did profiling of the PPC code and based on that made 
  127.     some changes to the C code, as well as moving certain loop routines into 
  128.     PPC assembly. The resultant code can be as much as twice as fast as 
  129.     Sparkle 2.3.5 if everything is right. But not everything is in PPC 
  130.     yet---I only had time to do what I thought were the most common cases. 
  131.     In particular only the 4x4 IDCT is in PPC, not the 8x8 IDCT, and
  132.     only 24bit display code is in PPC, not 8 or 16 bit code. 
  133.     Those will come in time. There are also some other major algorithmic 
  134.     modifications in the wings to boost speed, but those are further away.
  135.     Also going to PPC assembly has meant the app is now built with a crazy 
  136.     quilt of Symantec C++ versions 7, 8 and Toolserver. The point is that I 
  137.     am poised to switch to using the very high quality (and phenomenally 
  138.     slow) C/C++ compilers from say Motorola at some point in the nearish 
  139.     future. With luck these would give a speed boost that's reasonable and 
  140.     yet easily achieved.
  141.  
  142. What's new in 2.3.5?
  143. • I found that there are certain MPEGs floating around (examples are 
  144.     flower.mpg and byrncad.mpg) that are not unusually MPEG encoded.
  145.     Specifically they contain a B-frame as the second frame,  and it's not 
  146.     clear how the I-frame before that B-frame should be interpreted---as 
  147.     a past or as a future predictor. An MPEG like this would crash Sparkle,
  148.     now it does not. 
  149.     Be warned, however, that the MPEGs I've seen like this are not very well 
  150.     encoded---it seems that the encoder used shows a general lack of 
  151.     knowledge of how MPEG frames are re-ordered when decoding, so the 
  152.     resultant MPEG can be pretty awful in areas where there is a lot of 
  153.     video motion.
  154. • Bug fix related to releasing memory when Sparkle is closed.
  155. • Sparkle does not work when Aladdin Shortcut (an INIT like Boomerang) is 
  156.     installed. As far as I can tell, this is a problem with Shortcut. 
  157.     I wrote to Aladdin a long time ago asking about this and never received 
  158.     a reply. I then wrote a few days ago and have not received a reply. If 
  159.     you use Shortcut and want this fixed, complain to Aladdin and tell them 
  160.     to speak to me.
  161.  
  162. What's new in 2.3.4?
  163. • Misc bug fixes---mainly on rare occasions things were set up to 
  164.     trap to the debugger on an error. These situations are now 
  165.     invalidated for release builds.
  166. • MPEGSplitter 1.02 fixes:
  167.     * Code for testing if volumes were locked or not is now more robust.
  168.     * Code for selecting directories is more robust.
  169.     * Quite a bit faster.
  170.  
  171. What's new in 2.3.3?
  172. • Bug fix: Sparkle now runs OK without Speech Manager present (just like 
  173.     in 3.2.1 and earlier versions).
  174. • Bug fix: Sparkle was writing to memory location 4 during startup. 
  175.     The problem was some variables were being initailzed in the wrong 
  176.     order. This caused a message for people who had LOBE installed.
  177.  
  178. What's new in 2.3.2?
  179. • The new code for auto arranging windows when new files are opened 
  180.     wasn't quite correct. Now fixed.
  181. • Many people asked if I could return to picture based MPEG and QT 
  182.     encoding (as opposed to time based encoding). To satisfy everyone I 
  183.     now support both. To get time based encoding, choose a frame rate 
  184.     of zero when encoding MPEGs or movies. (On the latest versions of QT 
  185.     a frame rate of 0 is called Best in the popup list).
  186.     Also any frame rate is supported for MPEG encoding. Be aware, 
  187.     however, that by choosing a frame rate not supported by the MPEG 
  188.     standard you are creating an MPEG file that may not play on all 
  189.     MPEG decoders, especially those based on special purpose hardware.
  190. • QT encoding using a specified data rate (only possible with the Cinepak 
  191.     encoder) didn't work correctly. Now fixed. If you have a PowerMac I 
  192.     would recommend using this option.
  193.  
  194. What's new in 2.3.1?
  195. • The bug where opening some MPEgs gave an error -2014 is fixed.
  196. • Sound now works with looping.
  197. • MPEG encoder bugs fixed:
  198.     * For sources that are not a multiple of 16 in width and height, motion
  199.           vectors could go in the range between the real height/width and the 
  200.           height/width rounded up to a multiple of 16, which is not allowed by
  201.           the DIS. (Every other encoder I know also screws up this way, but we 
  202.           might as well get it right.)
  203.     * When skipping macroblocks in P & B pictures, DC DCT coefficients weren't
  204.          being reset to midgrey.
  205.     * When skipping macroblocks in P pictures, motion vectors were not being 
  206.         reset to zero.
  207.     * Half pixels now work again (by mistake I had disabled them in 2.3.0).
  208. • The code for auto arranging windows across screens when you open a new 
  209.     document has been changed. This new code is a little more flexible and 
  210.     I hope it'll be more likely to come up with optimal placements of new 
  211.     windows.
  212. • The progress bar now flips down automatically when you're encoding then
  213.     hides itself once encoding is done.
  214. • The way low memory situations are reported has been changed. This should 
  215.     work a little better with QT. Let me know if it behaves strangely.
  216. • Selecting portions of a movie is now supported. Select a portion of a 
  217.     movie using the shift key in conjunction with the mouse button or 
  218.     arrow keys. You can use a selection for two purposes:
  219.     * You can limit playback to within the selection.
  220.     * Only the selection will be used when creating a new QT/MPEG movie.
  221.  
  222. What's new in 2.3?
  223. • The MEG2Decoder had problem where it screwed up display of MPEGs that were 
  224.     not a multiple of 16 in width. Fixed
  225. • A serious problem with MPEGEncoding that often produced garbage MPEGs is 
  226.       fixed.
  227. • All encoding (QT and MPEG) is now done based on time. not frame number. 
  228.     This makes audio support much easier.
  229. • Preliminary audio support has been added for MPEGs. See the ``Readme Sound'' 
  230.      file for details.
  231. • Opening QT movies (especially long ones) is faster.
  232. • Some minor user interface tweaks.
  233. • Some cosmetic bugs fixed.
  234. • You can now choose the frame rate at which to play MPEGs and PICT 
  235.       pseudo-movies.
  236.  
  237. What's new in 2.2.3?
  238. • Bug fixes:
  239.     * Under certain circumstances an MPEG would stop playing just before the 
  240.       very last or first frame was displayed.
  241. • Speed tweaks.
  242.  
  243. What's new in 2.2.1?
  244. • Bug fixes:
  245.     * In very special circumstances (a slightly corrupt MPEG that was missing
  246.       a SequenceEndCode, I was writing a few bytes over the end of a memory 
  247.       block. This lead to crashes on 020/030 class macs.
  248.     * When encoding an MPEG, I (very stupid, I know) landed up aliasing the file
  249.       reference number associated with the MPEG file, then closing that 
  250.       fileReferenceNumber twice, something Apple warn is not a great idea.
  251.     * At startup if the user had a corrupt prefs file and tried to quit, 
  252.       Sparkle would crash---I was ForgetHandle()ing a resource handle. Grrr!
  253.     * Fixed Yet Another problem with the SC++ BEL macros. This one involved 
  254.       crummy Symantec code for testing if an object's on the stack that fails 
  255.       when threads are active.
  256.     * Was setting the bkPixPat of a window to NULL when closing it--dumb.
  257.     * Was disposing of a handle that was disposed of in some library code 
  258.       written by someone else. Taligent have a nice naming convention for 
  259.       libraries to prevent this sort of thing---it can't happen a moment too 
  260.       soon.
  261.     * Fixed a few anomalies I noticed in the way things are drawn on 1 and 2
  262.        bit screens (like anyone uses Sparkle on one :-) ).
  263. • Tweaks to make the progam feel snappier:
  264.     * Wherever I was calling FlushVol() to dump the disk cache to disk, I now 
  265.       do that asynchronously. Async IO is also used in a few other places. It's 
  266.       not yet used for reading files, but that will come.
  267.       Note that QuicKeys, for reasons that (I'll be charitable and not state my 
  268.       true feelings) make no sense to me, disables asynchronous IO so you won't 
  269.       see any effect. If you think this sucks, call CE Software and tell them.
  270.     * I now preload QuickTime stuff at startup to avoid latencies later when 
  271.       I need it.
  272.     * When building a PICT pseudo-movie, a much faster algorithm for 
  273.       scanning for the files of the movie is used.
  274.     * When displaying a PICT pseudo-movie, the disk should be accessed rather 
  275.       less often than before
  276. • MPEG encoding has been sped up. I have dropped the Berkeley 
  277.     encoding algorithms and used my own algorithms. (Where these are similar to 
  278.     the Berkeley algorithm, I use the same name simply for consistency.)
  279.     My algorithms are not only faster but produce slightly smaller files 
  280.     and use more elegant, shorter code---a perfect win win win situation. 
  281.     The Technical Readme file contains brief descriptions of the properties 
  282.     of the new algorithms.
  283.  
  284. What's new in 2.2?
  285. • The usual cleanups of course.
  286. • Substantially improved building of the index when an MPEG is opened. 
  287.     The new code is about five times the speed of the old code, and the 
  288.     interleaving of CPU and file access is done more carefully.
  289.     This should make windows popup more snappily when you open an MPEG file.
  290.     (Unfortunately if you're pulling the MPEG off a slow hard drive, CD-ROM 
  291.     or network this speed is limited anyway by the file system, not the CPU 
  292.     calculations.)
  293. • I should have had a TRY/CATCH handler in place for if an error occurred 
  294.     while the dialog boxes were being popped up for saving an MPEG or QT 
  295.     movie. This could have led to crashes (more likely just strange error 
  296.     dialogs), but is now fixed.
  297. • If you ran Sparkle in the background on an 8-bit color screen while a 
  298.     foreground app kept creating a number of different palettes, then when 
  299.     Sparkle was quit an error message could occur (I was running down an 
  300.     array associated with each new palette destroying items but I should 
  301.     have run down the array starting from the end not the beginning of the 
  302.     array.)
  303. • Thread synchronization is now done ``properly'' using a number of 
  304.     semaphores. This replaces the old method of using a very carefully 
  305.     orchestrated dance to move between threads. The new method is 
  306.     theoretically safer (and makes it a lot easier to alter the code) but 
  307.     being new I may have forgotten something in one routine or two. Bear 
  308.     with me and report any strange bugs---machine locking up, strange error 
  309.     messages, garbled images.
  310. • Some (very strange) QT movies may have multiple superimposed video tracks.
  311.     In this case when Sparkle created an MPEG or QT movie from the original 
  312.     QT movie parts of the image you saw could have random colors in them.
  313.     This is now fixed.
  314. • Other strange QT movies could be encoded with not a fixed frame rate but 
  315.     every frame lasting a different amount of time. When creating an MPEG 
  316.     nothing can be done about that, but when creating a new QT movie I allow
  317.     a frame rate of zero which will create all frames at whatever time they 
  318.     should be created at.
  319. • When a movie was being encoded to some other format the movie controller 
  320.      was not drawn with all decorations suppressed. Now it is.
  321. • When an MPEG window was opened said window displayed some flicker as pieces 
  322.     of it were drawn. This has been cleaned up. Likewise for PICT-sequence 
  323.     windows.
  324. • In a few places certain variables that should gave been initialized to NULL
  325.     or zero were not. In theory if an exception ocurred in these blocks of 
  326.     code a crash might occur. Anyway now fixed.
  327. • A bug in CustomGetFile() in the MacOS leads to a loss of 64 (or so) bytes 
  328.      every time a file selection dialog box is displayed if there is an `ictb' 
  329.      associated with the dialog box. (It looks like the `ictb' is read in and 
  330.      DetachResource'd() then the handle created that way is never disposed of.)
  331.      This was fixed by removing the `ictb's associated with these dialogs.
  332.     The same holds true for `mctb's if the dialog contains a popupmenu. I would 
  333.     guess it also holds for `cctb's, but it does NOT hold for `dctb's.
  334. • New look---windows with grey background, can shrink video as small as you like.
  335.     a startup splash screen.
  336. • If you decide partway through startup you don't want to run Sparkle, hit 
  337.     command-. (command-period) to abort.
  338. • PowerMac native (and very fast). A 6100/60 gives three times the 
  339.   playback rate of my Quadra 610.
  340. • Rewritten MPEG encoder to use way less memory.
  341. • MPEG decoding code has been restructured so as to present a block of 
  342.   code that can easily be dropped into other environments. This will form 
  343.   the basis for various QT components/drivers I'd like to write to give 
  344.   much tighter integration with QT.
  345. • All large memory allocation is done through temp mem. Basically this 
  346.   means you shouldn't ever need to increase the size of Sparkle's 
  347.   partition but you can open and save files limited only by all the 
  348.   memory on your mac.
  349. • Foundations have been laid for AppleScripting. You probably can't do 
  350.   any useful scripting with this release but that will change soon.
  351. • User interface has been tweaked a little. I hope you like the changes.
  352. • The most common problem with the 2.1 versions was that the preferences 
  353.   file would become corrupted leading to random errors. The prefs file 
  354.   handling has been changed in this version to make that much less likely.
  355.   If this release gives you problems, destroy the Sparkle prefs file then 
  356.   try again.
  357. • Many many bug fixes.
  358.  
  359.  
  360. What's new in 2.1.5?
  361. • Somewhere in the cleanups of code of the last few revs I landed up 
  362.     dividing some color motion vectors by two too often resulting in
  363.     misaligned color on MPEGs created without half-pixels. This is fixed.
  364.  
  365. What's new in 2.1.4?
  366. • Many many internal cleanups of the code as part of my cleanup for 
  367.     PowerPC. If these cleanups broke anything, please tell me.
  368. • There was in bug in some earlier versions so that when you opened Sparkle 
  369.     on a system without QuickTime rather than quitting gracefully it could 
  370.     crash when quitting. Now fixed.
  371. • Minor changes have been made to better support Macintosh Easy Open.
  372. • When saving an MPEG or QT movie in an alternative form the play button 
  373.     of the movie controller is hidden which I think looks better.
  374. • When a movie saving was in progress and was paused, if the relevant 
  375.     window was covered then uncovered (generating an update event)  
  376.     Sparkle would hang. This was because Sparkle tries to switch to 
  377.     a thread that has been put to sleep. This has been fixed.
  378. • If an MPEG were opened and immediately command-S were typed, once the 
  379.     saving was done it was possible for Sparkle to popup an error message.
  380.     The problem was that the very first update event for the MPEG window, 
  381.     used to initialize some variables, would be discarded is a save were 
  382.     begun immediately. The code used when an MPEG is opened has been fiddled
  383.     a little to prevent this.
  384. • I was asked by some people doing Sparkle for batch conversion of MPEG 
  385.     and QT for a way for Sparkle to indicate when it is done converting a 
  386.     file. I won't have AppleScriptability in place for a few months but I 
  387.     did put in a quick hack to allow this for users of QuicKeys. Look in the 
  388.     ReadMe 2nd file for details (do a search for QuicKeys). 
  389. • In the code I added to 2.1.3 to support halfPixels I made a typo which 
  390.     under rare circumstances would set the color of a block incorrectly or 
  391.     (if you were unlucky) crash. This is fixed.
  392. • Memory used for MPEG encoding MPEGs has been dramatically reduced. 
  393.     For the case of encoding MPEGs with only I-frames, the memory 
  394.     required is 1/6th of what was required in 2.1.3 and earlier versions. 
  395.     For MPEGs using P and/or B frames, memory required is about .4 of
  396.     what required earlier (actually 15/36). These memory requirements
  397.     will be shrunk further in later versions of the code.
  398. • The MPEG Playback prefs dialog has cleaned up a little and behaves a 
  399.     little more intuitively. Now the options under the 8bit color section 
  400.     always apply when the screen is 8bit color, regardless of the 8bit 
  401.     dithering method used.
  402.     There is now a tryout button. Click there to see how the changes you 
  403.     make alter what you see.
  404. • Two further options have been added to the MPEG Encoding dialog to give 
  405.     you a little more control over this behavior. 
  406.     You can now specify whether half-pixel encoding is used or not
  407.     (in the past half-pixels were always used).
  408.     Likewise you can specify whether or not to compare against raw 
  409.     reference frames or reference frames decoded from the MPEG stream being 
  410.     created (in the past decoded reference frames were always used).
  411.  
  412. What's new in 2.1.3?
  413. • There was a bug in 2.1.2 that prevented one (usually) from playing MPEGs 
  414.     in play all frames mode. So sorry about that. This is fixed.
  415. • I have (FINALLY) fiddled the P and B frame calculations to be EXACT at 
  416.     highest quality settings (ie when saving an MPEG to a secondary file.)
  417.     The last few touches involved doing all the finicky details specified 
  418.     in the MPEG DIS (which in the worst case can involve compositing a single 
  419.     image point from values spread over nine different places. The differences 
  420.     are very subtle but are visible---large areas of smooth texture in 
  421.     particular in the past tended to develop a slight granularity which is 
  422.     now cured.
  423.     This code involved coding a huge number of special cases and I may have 
  424.     made a mistake in a case or two. I have run all my example MPEGs through 
  425.     and they look good but if you see a block that looks misaligned or has a 
  426.     different color from what it should have, please tell me so I know I 
  427.     need to fix a mistake.
  428. • There was a bug in 2.1.2 and earlier versions where, if an MPEG was playing 
  429.     and you closed the window there was a small chance of an error message 
  430.     popping up. This bug was due to what's called a race condition. 
  431.     It should have been fixed, but if not please tell me.
  432.  
  433. What's new in 2.1.2?
  434. • In 2.1 when a window was first opened and the Video menu selected, the 
  435.     menu showed Palindrome looping as on even though it was not. This is fixed.
  436. • In 2.1 I had a serious (crashing) possible bug that could occur when a 
  437.     window was closed. This was because the life cycles of video encoding 
  438.     threads and video playing threads are different. I must rationalize 
  439.     these to one model, but till then I've applied a quick and dirty fix.
  440. • Long complicated pathways through about six auxiliary functions, used when 
  441.     threads died and a holdover from the Sparkle 1.x days, have been removed to 
  442.     use a much simpler virtual function based scheme. This is slightly faster
  443.     and, more important, much simpler hence, hopefully, less buggy.
  444. • Deactivating/activating of the ``Change file type to MPEG'' radio button in     
  445.     the open file dialog was a little erratic. This has been fixed.
  446. • Rudimentary balloon help has been added.
  447. • When memory is very low and a window starts being opened, but fails 
  448.       partway, the cleanup code was slightly wrong. Now fixed.
  449. • Improved the display on 4-bit color screens. It was very blocky.
  450. • Changed the progressbar to display properly on 4-bit color screens.
  451.     The two colors used for foreground and background were being mapped onto
  452.     the same color.
  453. • Change the progress bar to update itself better when parts of the window are 
  454.     uncovered. Before parts would be drawn quite a while before other parts
  455.     giving a result that looked silly.
  456. • Added a menu option to allow operation without ever yielding time to 
  457.     WaitNextEvent. If you don't need to give time to background applications, 
  458.     use this option for faster, less jerky, playback.
  459. • Speech manager code used to announce a delay when encoding an MPEG 
  460.     could, if timing was just wrong, crash. I think the problem was that the 
  461.     Speech Manager was building internal data structures on the stack, and 
  462.     that stack disappeared when the the MPEG encoding thread died. Anyway 
  463.     I've modified the speech code so this can't happen.
  464. • Discovered a serious problem in my video encoding code. When an MPEG 
  465.     window was resized while it was being converted to another MPEG or QT 
  466.     movie, the result could be a munged image for a few frames. The fix 
  467.     involved a major structural readjustment of Sparkle---ALL video 
  468.     manipulations now pass through ThreadEvent queues---but the result is 
  469.     that for the first time I feel confident about the theoretical 
  470.     underpinnings of Sparkle---that while minor bugs may remain, there are 
  471.     no conceptual nasties waiting to bite me.
  472. • When windows are resized, the resizing is done in a manner that leaves 
  473.     no gunk in the window in the moments before the resizing is complete.
  474. • I discovered yet another way in which things could crash---The MacOS call
  475.     DrawPicture() will crash if it runs out of memory---thanks Apple.
  476.     There's nothing I can do about this, so what I did do is try to trap 
  477.     situations that form a pattern of using DrawPicture() while memory is 
  478.     getting lower and warn you that memory is running low. This doesn't 
  479.     catch all situations but catches some.
  480. • The play/pause button no longer toggles between states when you start a 
  481.     movie saving or pause it. This is because what I was doing to get this 
  482.     to work in QT 1.x no longer works nicely in QT 2.0 --- flickering frames
  483.     result. I guess this is a consequence of DataPipe or something. 
  484.     Anyway I've replaced this with indicators in the title bar.
  485. • I made a few changes to allow easier more sensible playback of QT movies that 
  486.     consist of only sound. This is at present rudimentary but is a start.
  487.  
  488. What's new in 2.1?
  489. • Yet again memory management has been fiddled with. Previous tinkering with 
  490.     memory management was to ensure that my own code never crashed for lack 
  491.     of memory. Building on top of that, I've tried to ensure that calls to 
  492.     the operating system won't crash for lack of memory. This is more 
  493.     difficult because, obviously, I don't know just what the memory 
  494.     requirements of each call are. However I've done the best I can, and 
  495.     the resultant code seems even more robust than 2.02.
  496. • The scheduling has been revamped based on the threading. I now make 
  497.     intelligent decisions about which thread to schedule when. Also calls to
  498.     the main event loop, which were very expensive in time, have been cut 
  499.     dramatically. the result is about a 15% speed boost all round.
  500. • MPEG playback is now based on genuine timing, not on simply playing 
  501.     every frame as fast as possible. Like QuickTime movies, you can play 
  502.     MPEGs back in real time or play every frame. I also now support the 
  503.     movie controller variable speed controls obtained by control-clicking 
  504.     on the forward/backward stepper buttons.
  505. • You can now set QT and MPEG movies to loop.
  506. • You can now grow or shrink MPEG and QT movie windows.
  507. • The cursor is now hidden when movie playback starts, until you move it.
  508.     This seems to be a reasonable compromise for preventing flickering cursor
  509.     when starting a movie using the keyboard, but atill allows the user 
  510.     easily to find the cursor when needed.
  511. • When files are opened, windows are now tiled in a vaguely intelligent fashion,
  512.     attempting both to use the available screens with best depth, and to 
  513.     avoid window overlap.
  514. • Dragging windows is now aligned to a grid of optimal window placement. This
  515.     gives better movie playback.
  516. • Can now show/hide the progressPane, movie controller and frame count with the 
  517.     tab key using tab, shift-tab, control-tab.
  518. • The drawing of the progress bar has been altered slightly, to fix cosmetic 
  519.     defects and to make the appearance closer to that of the movie controller.
  520. • Support for MPEGs with a pixel aspect ratio not equal to one has been added.
  521.       At present this isn't switched on because some dumb MPEGs out there 
  522.       have a bogus aspect ratio encoded in them. However if someone wants 
  523.       this feature right away, I'll add a user interface to access it.
  524. • Support for MPEGs with multiple sequence headers has been added, not 
  525.     that I have ever seen such an MPEG.
  526. • Playback is now much faster through a variety of mechanisms. However 
  527.     this has, as a consequence, lower quality playback. You may set through 
  528.     preferences which optimizations you're willing to accept for faster 
  529.     playback and which you're not willing to accept. All optimizations are 
  530.     turned off when converting an MPEG to another format so that you'll get 
  531.     the best possible quality.
  532.     Playback speed is now about 1.6 times faster for 24 bit screens, about 
  533.     2.5 times as fast for 8 bit grey screens, and improvements in between for 
  534.     other screen depths.
  535. • Special purpose display code is used for 
  536.     24 bit, 16 bit and 8 bit color screens and 8 bit grey screens.
  537.     All other screens are sent through one of the above special purpose codes 
  538.     then use QuickTime to convert the pictures to the appropriate screen depth.
  539.     Obviously special purpose code is faster. If I get lots of calls for 
  540.     screen depths other than the one's I'v supported directly, I'll look into 
  541.     adding more special purpose code.
  542. • In 2.0 I broke the support for adding files called name.mpg, but without 
  543.     a file type of MPEG so you could open files of that type but nothing 
  544.     would happen. Sorry about that. It's been fixed. 
  545. • When files are opened and are not of the default Mac types (for example 
  546.     files imported from a UNIX box, or files on a PC CD ROM) Sparkle uses 
  547.     more intelligence in deciding whether to open these files as MPEGs, QT 
  548.     movies or pictures. If this mechanism is still not general enough for 
  549.     some users (I image mainly users sharing data with PCs), let me know.
  550. • The ``official'' MPEG encoding pattern of IBBPBBPBBPBB is now a pre-defined 
  551.     option. Some people asking for this as a pre-defined option have given me
  552.     slightly different patterns as the ``official'' pattern. However what I 
  553.     have used is, to the best of my knowledge correct, and I'm assuming these
  554.     people who wrote to me simply made typos. If you have comments on this, 
  555.     please mail me.
  556. • I twiddled the RGB to YCrCB conversion code that is the first step in 
  557.      encoding MPEGs. The changes won't affect anyone except people creating 
  558.      MPEG movies whose width or height is odd, in which case the very last 
  559.      row or column of pixels will have more accurate color. The important 
  560.      change, however, was that I no longer read beyond the end of some arrays,
  561.      so I'm ready for when Apple give us protected memory a year from now.
  562. • Under certain rare circumstances, depending on the number of frames int the 
  563.     input file and the IPB pattern used, the last frame or two of the input 
  564.     would not be saved in the output MPEG. This is fixed.
  565. • MPEG encoding now can specify a frame rate (in the past this was always 
  566.     30 fps). Sure the range of choices is limited---blame the people who 
  567.     wrote the MPEG spec---those are, basically, the only choices.
  568.     1) Can people with MPEG hardware verify that this works for me?
  569.         On my mac with 10fps max playback, it's tough to see if this works.
  570.     2) There are some frame rates I've omitted that are very close to those 
  571.        I give, for example 29.97 fps. At some point i'll get the finicky 
  572.        time right to support these but it's a pretty low priority compared 
  573.        to sound.
  574.  
  575. What's new in 2.01?
  576. • Implemented padding YUV macroblocks with a repeat of the last value of
  577.      each YUV triplet when macroblocks at the edge of a frame spill over 
  578.      the edge. The most common case of this is a 120 pixel high movie with a 
  579.      macroblock height of 128. In the past this spillover was filled randomly.
  580.      The result of this is that MPEGs created are about 15% smaller.
  581. • Some diddling with the code used by the IDCT algorithm gives a speed boost 
  582.     of about 5% to both playing and encoding MPEGs.
  583. • Fixed a serious bug that prevented you from playing an MPEG if you started 
  584.     playing    it then interrupted it. A nice byproduct of this is that I got 
  585.     jogging of MPEGs fully operational. You can now repeatedly view a section 
  586.     of the MPEG by hitting command-right-arrow then command-left-arrow to keep 
  587.     the MPEG moving forwards then backwards.
  588. • Altered the alert popped up when the Thread Manager is not present to make
  589.     it more palatable to corporate and institutional users.
  590. • Fixed the MPEG buffering which would give problematic results for very small
  591.     MPEGs (say three frames or less).
  592. • Finally went through all resources, marking them purgable or not and removing
  593.     the unnecessary ones.
  594. • Fixed the "PBBIBB" default frame set to make it correspond to the user view
  595.     of things, not my programmer's view.
  596. • Fixed a bug that prevented a temporary movie created by the movie controller 
  597.     handling an MPEG file from being destroyed.
  598. • Fixed two bugs in the Think Class Library dealing with the loading of dialogs 
  599.     then manipulating them without setting their memory blocks to non-purgable.
  600. • Fixed a long-standing bug in the MPEG player buffer-handling code that 
  601.     would cause the MPEG frame index to be incorrect if it was created while 
  602.     memory was short. This probably never caused problems except for very long
  603.     MPEGs.
  604. • When converting a QT movie into a different movie form, the dialog that comes
  605.     up asking you for compression options will have the frame rate and key
  606.     frame rate set at what the original movie used, sparing you from having to
  607.     guess. I will eventually have this working across all file conversions, 
  608.     not just movie-->movie.
  609. • The Think C 6 compiler contains a bug when performing code-motion optimization 
  610.     on complex loops. If you run through the assembly it produces in this case,
  611.     it performs some very nifty register coloring and creating induction 
  612.     variables for the loop. It then leaves out one crucial instruction to 
  613.     update one of the induction variables each pass through the loop and so 
  614.     the code is garbage. 
  615.     As far as I can tell, this only affects one function in my code and I have
  616.     used a #pragma there to prevent it happening, but the fact that bugs like
  617.     this exist in the compiler is a little worrying.
  618. • Revised all memory allocation so that it is more likely to not to use up all
  619.     memory reserves and leave nothing for toolbox.
  620. • Found an especially nasty bug involving grabbing frames from a QT movie 
  621.     which, when memory ran low, would leave the system GrafPort/GDevice 
  622.     environment in an inconsistent state.
  623. • Revised all uses of GWorld to use tempMem, but fallback to local heap if 
  624.     tempMem is unavailable.
  625. • Altered the strings used to popup error messages at startup if QuickTime 
  626.     is not available. These got mixed up when I moved code around.
  627. • The code to build the MPEG index when an MPEG is opened would run out of space
  628.     when a very large MPEG was opened---one of a thousand frames or more. Now 
  629.     memory is allocated for this a little more flexibly.
  630. • Fixed a bug I inserted when I changed from Sparkle 1.6 to 1.7. I rewrote the
  631.     Berkeley motion vector code to speed it up and in the process made one 
  632.     little typo, shifting a variable right by 1 not 2. The effect of this, in 
  633.     Sparkles 1.7 and 2.0 was that, under very rare occasions, blocks of color 
  634.     would appear a few pixels off from where they should be. The only place I 
  635.     ever saw this was three or four frames of the MPEG sales110.mpg.
  636.     This is not related to a separate problem. 
  637.     The motion estimation code in the MPEG encoder (at present the Berkeley code
  638.     with practially no changes) is not perfect. It sometimes creates 
  639.     blocks that appear to be wildly off from where they should be (by quite a few
  640.     pixels). This is not very obvious in real life, but is very obvious in animation.
  641.     This is largely a quantization artifact---it goes away if you lower the 
  642.     quantizations. But obviosly you don't want to do that always, just where 
  643.     necessary, so you really want a smarter quantizer that is adaptive. 
  644.     I'll work on issues like this as soon as I can.
  645. • When converting a movie with sound to MPEG or QT, occasionally pops of sound could 
  646.     be heard. This is fixed.
  647. • When converting movies with very low keyframe rates (say 20 or more dependent 
  648.     frames per keyframe) occasionally the display of the movie would get confused 
  649.     and appear to alternate between two different frames. This is fixed.
  650.  
  651. What's new in 2.0?
  652. • The structure of the code has been completely altered to be based on 
  653.     threads. This makes it much easier for me to add new features to the code 
  654.     while having it retain MultiFinder friendliness.
  655. • Now opens and plays QT movies.
  656. • Now can create MPEG files. General conversion from 
  657.      {QT or MPEG}--->{QT or MPEG} is possible.
  658. • Many minor changes to the way files are opened, named and such.
  659. • Makes minor use of the speech manager if installed.
  660. • You can now play MPEGs backwards.
  661.  
  662. What's new in 1.71?
  663. • The progress bar now updates itself properly at the very end of saving 
  664.     each frame to Quicktime. It also draws itself better on b/w screens.
  665. • More of the default QT movie player keystrokes now work.
  666. • The app notes if an MPEG file has many errors and if so warns you that 
  667.     it has probably been transferred to the mac incorrectly.
  668. • I have incorporated a workaround to make Sparkle work with the QT VM 
  669.     extension. However I do not recommend you use the two together. If you do 
  670.     use QT VM you will find Sparkle's memory usage a little less efficient 
  671.     than without using QT VM. This is because of the way QT VM works.
  672. • Fixed a bug that caused unusually sized MPEGs to display as distorted.
  673. • Sparkle should now cope a little better with low memory situations.
  674. • Added a small tweak to improve drawing on 16bit screens under low 
  675.     memory conditions.
  676. • Uses the most recently released version on the floating windoid.
  677. • I have learned of an app that will convert QT to MPEG on the mac. It's 
  678.     not the easiest thing to use and I recommend this only for people 
  679.     who really need this, not for people who just want to play around.
  680.     See the README file for details.
  681.  
  682. What's new in 1.7?
  683. • Opening files is much faster.
  684. • Fixed the size of the checkboxes in the Open File dialog to the correct 
  685.     size for all those millions of people who use Chicago as their system 
  686.     font cause they have no sense of aesthetics. Oops.
  687. • Now when Sparkle changes the file-type of an file, the Finder will update 
  688.     the icon immediately, instead of forcing you to open and close the 
  689.     folder to see a new icon. Thanks to Jamie McCarthy for telling me how 
  690.     to do this.
  691. • Added an "About Sparkle" dialog box to quieten the constant stream of 
  692.     complaints about this.
  693. • Changed the way progress is reported. I think the new scheme feels 
  694.     rather more elegant. (If you have a fast machine and only use small 
  695.     MPEGs, you may not notice this change much.)
  696. • Adde random access. You can now use the step backward stepper, or 
  697.     simply click in movie controller where you want to go. All standard 
  698.     movie controller clicks and keystrokes are supported.
  699. • Restructured the internal code vastly. This is what took most of the 
  700.     time and while it doesn't directly help you users, it gives me
  701.      a framework that's much easier to build on. For example it should be 
  702.      trivial to add Apple Event support when I get round to that.
  703. • Three or four minor bugs were squelched, mostly involving Sparkle crashing
  704.      when it encountered MPEGs with invalid data in them.
  705. • Now quits gracefully when started on a 68000 mac like a Classic, rather 
  706.     than crashing. I'm sure    lots of people care about this.
  707. • Added better multi-tasking support. This takes two forms. 
  708.     One is that the length of the timeslices Sparkle uses before giving up 
  709.     the CPU are now absolute times.  Before they were numbers that worked 
  710.     well for my SE/30, but probably not optimally for slower or faster 
  711.     machines.
  712.     The second is that you can now context switch out of Sparkle while it 
  713.     is doing slow QT conversions (especially converting to Compact Video).
  714.     The way I have implemented this is not wonderful, but the best I can 
  715.     do given the present way the code is structured. The next version 
  716.     will use the Thread Manager and will do this rather better.
  717.     This second form of timeslicing is done through the 
  718.     SetSequenceProgressProc() call which is new in QT1.6 and which is why 
  719.     I now require use of QT1.6. Also QT does not yield the CPU very often,
  720.     and (as far as I know) there is no way to make it yield more often.
  721.     So while your machine is no longer completely frozen as it does its
  722.     conversion, it's still not too pleasant to use for typing. I can't do 
  723.     much about this---complain to Apple and tell them to change this part of 
  724.     QT, or better yet the whole OS.
  725.  
  726. What's new in 1.6?
  727. • I became tired of continually having to explain to people about mac 
  728.     file types, so I wrote a file filter function for the Open File dialog 
  729.     box which displays ALL files with a .mpg suffix. This should make use a 
  730.     lot easier for novices.
  731. • Fixed a bug that involved writing to NULL.
  732. • Fixed a bug that prevented IBP type MPEGs from rewinding when they 
  733.     reached the end and the play button was hit twice.
  734.  
  735. What's new in 1.5.2?
  736. • I was disposing of a handle twice (specifically I was disposing of a 
  737.     pixmap and then its colortable, not realizing that DisposPixMap took 
  738.     care of the colortable for me.) Thanks to Dan Sears for pointing this out.
  739.     I never noticed a problem due to this bug, but it's probably good to 
  740.     have killed it.
  741.  
  742. Whats new in 1.5.1?
  743. • One part of my speed optimizing code was not being initialized properly. 
  744.     This caused a very specific type of MPEG file to show parts of its first 
  745.     frame as greenish blobs. Now fixed.
  746. • The code to detect errors in a corrupted MPEG file has been made even 
  747.     more robust. Substantially better recovery from such errors, by 
  748.     rebuilding the lost parts of a frame from the previous frame, has been 
  749.     introduced. Thanks to a wonderfully corrupt MPEG file I pulled off 
  750.     usenet with about 15 misc errors in it for pointing out new and 
  751.     ingenious ways to fail.
  752. • New icons, courtesy of Richard Lim in Britain. I hope you like them.
  753.     You will have to rebuild the desktop to see them.